package com.stt.order.design.chain;

import com.stt.order.model.Order;
import com.stt.order.design.strategy.PromotionStrategy;
import java.math.BigDecimal;

/**
 * 促销处理器
 * 使用责任链模式，将多个优惠策略串联起来
 */
public class PromotionHandler {
    // 当前处理器使用的优惠策略
    private final PromotionStrategy strategy;
    // 责任链中的下一个处理器
    private PromotionHandler next;

    public PromotionHandler(PromotionStrategy strategy) {
        this.strategy = strategy;
    }

    /**
     * 设置责任链中的下一个处理器
     */
    public void setNext(PromotionHandler next) {
        this.next = next;
    }

    /**
     * 处理优惠计算
     * 1. 使用当前策略计算优惠
     * 2. 如果有下一个处理器，则继续传递给下一个处理器
     */
    public BigDecimal handle(Order order, BigDecimal amount) {
        // 使用当前策略计算优惠后的金额
        BigDecimal result = strategy.apply(order, amount);
        // 如果存在下一个处理器，则继续处理
        if (next != null) {
            return next.handle(order, result);
        }
        return result;
    }
} 